/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package camada.bancodedados.daoimplemente.orcamento;

import camada.bancodedados.conexao.Conexao;
import camada.negocio.dao.orcamento.MaterialProdutoOrcamentoDAO;
import eloma.classe.orcamento.MaterialProdutoOrcamento;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import utilitarios.Exceptions;

/**
 *
 * @author icaro.klinger
 */
public class MaterialProdutoOrcamentoDAOImpl implements MaterialProdutoOrcamentoDAO {

    Exceptions exceptions = new Exceptions();

    @Override
    //<editor-fold desc="inserirMaterialProdutoOrcamento">
    public boolean inserirMaterialProdutoOrcamento(MaterialProdutoOrcamento orc, int idProdutoOrcamento) {
        PreparedStatement pstm = null;
        try {
            final String SQL_INSERT
                    = "insert into materialProdutoOrcamento(idMaterial,idProdutoOrcamento, metros)values(?,?,?)";
            pstm = Conexao.getCon().prepareStatement(SQL_INSERT);
            pstm.setInt(1, orc.getMaterial().getIdMaterial());
            pstm.setInt(2, idProdutoOrcamento);
            pstm.setDouble(3, orc.getMetros());
            pstm.executeUpdate();
        } catch (SQLException e) {
            exceptions.Exceptions(e.getMessage(), "MaterialProdutoOrcamentoDAOImpl-Inserir");
            return false;
        }

        return true;
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="pesquisarMaterialProdutoOrcamentoPorIdentificadorProdutoOrcamento - Método de busca em outra tabela">
    public List<MaterialProdutoOrcamento> pesquisarMaterialProdutoOrcamentoPorIdentificadorProdutoOrcamento(int idProdutoOrcamento) throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            final String SQL_PESQUISA_CLIENTE = "select * from materialProdutoOrcamento where idProdutoOrcamento = " + idProdutoOrcamento;
            stmt = Conexao.getCon().prepareStatement(SQL_PESQUISA_CLIENTE);
            rs = stmt.executeQuery();
            return carregarMultiplosResultados(rs);
        } catch (SQLException sqle) {
            exceptions.Exceptions(sqle.getMessage(), "MaterialProdutoOrcamentoDAOImpl-PesquisarMaterialProdutoOrcamentoPorIdentificadorProdutoOrcamento");
            throw new Exception(sqle);
        } catch (Exception e) {
            exceptions.Exceptions(e.getMessage(), "MaterialProdutoOrcamentoDAOImpl-PesquisarMaterialProdutoOrcamentoPorIdentificadorProdutoOrcamento");
            throw new Exception(e);
        } finally {
        }
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="atualizarMaterialProdutoOrcamento">
    public void atualizarMaterialProdutoOrcamento(MaterialProdutoOrcamento orc, int idProdutoOrcamento) {
        PreparedStatement pstm = null;
        try {
            final String SQL_UPDATE
                    = "UPDATE materialProdutoOrcamento SET idMaterial = ? ,metros = ?, idProdutoOrcamento = ? where idMaterialProdutoOrcamento = ?";
            pstm = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_UPDATE);
            pstm.setInt(1, orc.getMaterial().getIdMaterial());
            pstm.setDouble(2, orc.getMetros());
            pstm.setInt(3, idProdutoOrcamento);
            pstm.setInt(4, orc.getIdMaterialOrcamento());
            pstm.executeUpdate();
        } catch (SQLException e) {
            exceptions.Exceptions(e.getMessage(), "MaterialProdutoOrcamentoDAOImpl-AtualizarMaterialProdutoOrcamento");
        }
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="removerMaterialProdutoOrcamento">
    public void removerMaterialProdutoOrcamento(MaterialProdutoOrcamento orc) {
        PreparedStatement pstm = null;
        try {
            final String SQL_DELETE = "delete from materialProdutoOrcamento where idMaterialProdutoOrcamento = ?";
            pstm = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_DELETE);
            pstm.setInt(1, orc.getIdMaterialOrcamento());
            pstm.executeUpdate();
        } catch (SQLException e) {
            exceptions.Exceptions(e.getMessage(), "MaterialProdutoOrcamentoDAOImpl-RemoverMaterialProdutoOrcamento");
        }

    }
    //</editor-fold>

    @Override
    //<editor-fold desc="pesquisarTodosMaterialProdutoOrcamentos">
    public List<MaterialProdutoOrcamento> pesquisarTodosMaterialProdutoOrcamentos() throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String SQL_STATEMENT = "Select * from materialProdutoOrcamento";
        try {
            stmt = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_STATEMENT);
            rs = stmt.executeQuery();
            return carregarMultiplosResultados(rs);
        } catch (SQLException sqle) {
            exceptions.Exceptions(sqle.getMessage(), "MaterialProdutoOrcamentoDAOImpl-PesquisarTodosMaterialProdutoOrcamentos");
            throw new Exception(sqle);
        } catch (Exception e) {
            exceptions.Exceptions(e.getMessage(), "MaterialProdutoOrcamentoDAOImpl-PesquisarTodosMaterialProdutoOrcamentos");
            throw new Exception(e);
        } finally {
        }
    }
    //</editor-fold>

    //<editor-fold desc="carregarMultiplosResultados">
    public List<MaterialProdutoOrcamento> carregarMultiplosResultados(ResultSet rs) throws SQLException {
        List<MaterialProdutoOrcamento> resultList = new ArrayList<MaterialProdutoOrcamento>();
        while (rs.next()) {
            MaterialProdutoOrcamento dto = new MaterialProdutoOrcamento();
            carregarVO(dto, rs);
            resultList.add(dto);
        }
        return resultList;
    }
    //</editor-fold>

    //<editor-fold desc="carregarResultadoSimples">
    private MaterialProdutoOrcamento carregarResultadoSimples(ResultSet rs) throws SQLException {
        if (rs.next()) {
            MaterialProdutoOrcamento dto = new MaterialProdutoOrcamento();
            carregarVO(dto, rs);
            return dto;
        } else {
            return null;
        }
    }
    //</editor-fold>

    //<editor-fold desc="carregarVO">
    private void carregarVO(MaterialProdutoOrcamento dto, ResultSet rs) throws SQLException {
        try {
            dto.setIdMaterialOrcamento(rs.getInt("idMaterialOrcamento"));

            //Material material = daoMaterial.pesquisaMaterislPorIdentificador(rs.getInt("idMaterial"));
            //dto.setMaterial(material);
            dto.setMetros(rs.getFloat("metros"));

        } catch (Exception e) {
            exceptions.Exceptions(e.getMessage(), "MaterialProdutoOrcamentoDAOImpl-MaterialProdutoOrcamento");
        }
    }
    //</editor-fold>
}
